AWSのエンドポイントにしか接続できないプロキシサーバーを構成する
インターネットに疎通できないEC2からAWSサービスを利用する場合、VPCエンドポイントが便利です。VPCエンドポイントが提供されていないサービスに接続するために、Amazon Linux 2にSquidをインストールし、そのサービス以外には接続できない設定を行う方法をご紹介します。本記事ではAmazon Athenaにだけ接続できるプロキシサーバーを構成します。
EC2からAWSサービスを使うためには?
AWSサービスを使うためには、AWSのエンドポイントに接続できる必要があります。インターネットに接続できないEC2では、VPCエンドポイントが便利です。プライベートIPを使ってAWSサービスを利用できます。執筆時点では、AthenaのVPCエンドポイントは提供されていません。このような場合、AWS サービスエンドポイントへの接続経路を用意します。東京リージョンのエンドポイントはathena.ap-northeast-1.amazonaws.com
です。プロキシサーバーはこちらのエンドポイントのみに接続できるよう構成します。
Squidのインストール
Amazon Linux 2を作成し、Elastic IPアドレスを割り当てておきます。squidをインストールします。検証に利用したバージョンは3.5.20です。
# yum install -y squid # squid -v Squid Cache: Version 3.5.20 Service Name: squid (略)
設定ファイルへの記載
設定ファイル/etc/squid/squid.conf
を編集します。ローカルネットからの接続を許可するhttp_access allow localnet
をコメントにし、ホワイトリストへの接続を許可する# allowed sites
以下を追加します。
#http_access allow localnet http_access allow localhost # allowed sites acl whitelist dstdomain "/etc/squid/allowed-sites.squid" http_access allow whitelist
ホワイトリストの作成
ホワイトリスト/etc/squid/allowed-sites.squid
を作成し、athenaのエンドポイントを記載します。
athena.ap-northeast-1.amazonaws.com
squidを再起動(systemctl restart squid
)し、設定を反映します。
テスト
Athenaの利用
プライベートサブネットのEC2のAWS CLIからAthenaを利用します。プロキシサーバーの情報を環境変数にセットします。
export HTTP_PROXY=http://proxy-server-privateip:3128 export HTTPS_PROXY=http://proxy-server-privateip:3128
IAMロールを利用する環境では、インスタンスメタデータへの接続はプロキシを使わないよう設定します。こちらを設定しないとIAMロールを認識できません。
export NO_PROXY=169.254.169.254
Athenaのコマンドを実行すると、コマンド結果が表示されます。
$ aws athena list-query-executions { "QueryExecutionIds": [ "12345678-9012-3456-7891-234567890123", "abcdefgh-ijkl-nmop-qrst-uvwxyzabcdef", ] } $
EC2コマンドの場合、EC2のエンドポイントに接続されます。EC2のエンドポイントはホワイトリストに登録されていないため、エラーになります。
$ aws ec2 describe-instances Failed to connect to proxy URL: "http://10.0.0.4:3128" $
Squidの接続ログ
/var/log/squid/access.log
にアクセスログが残ります。Athenaへの接続は、TCP_TUNNEL/200
です。
1567572911.222 51 10.0.0.119 TCP_TUNNEL/200 5856 CONNECT athena.ap-northeast-1.amazonaws.com:443 - HIER_DIRECT/52.193.39.132 -
EC2エンドポイントへの接続や、www.google.co.jp
はSquidで許可されていないため、TCP_DENIED/403
になります。
1567573059.814 0 10.0.0.119 TCP_DENIED/403 3979 CONNECT ec2.ap-northeast-1.amazonaws.com:443 - HIER_NONE/- text/html 1567573877.659 0 10.0.0.119 TCP_DENIED/403 4072 GET http://www.google.co.jp/ - HIER_NONE/- text/html
まとめ
インターネットに疎通できないEC2からAthenaを利用するためにプロキシサーバーを構成しました。プロキシサーバーではホワイトリストを利用し、指定したドメイン以外への接続を禁止しました。ご紹介した内容は、VPCエンドポイントが提供されていないほか、OSアップデートなどのために外部リポジトリへの接続が必要なケースや、外部サービスにhttp(s)で接続したいケースでもご利用いただけます。